/*
 * Copyright (c) 2007-2020 西安交通信息投资营运有限公司 版权所有
 */

package com.xci.edu.core.dao;

import com.github.lvyanyang.annotation.Paging;
import com.xci.edu.core.entity.EduStudent;
import com.xci.edu.core.filter.EduStudentFilter;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 学员信息数据层
 * @author 张谦 zhangqian@xci96716.com
 * @since 2020-11-24 15:29:29
 */
public interface EduStudentDao {
    /**
     * 动态新建学员信息
     * @param entity 学员信息实体
     * @return 返回影响的行数
     */
    int insertDynamic(@Param("entity") EduStudent entity);

    /**
     * 动态修改学员信息
     * @param entity 学员信息实体
     * @return 返回影响的行数
     */
    int updateDynamic(@Param("entity") EduStudent entity);

    /**
     * 退档(清空当前学员的培训id和培训name和状态变成1和已培训总学时(秒)变成0))
     * @param id     学员信息主键
     * @return 返回影响的行数
     */
    int updatePlanIdAndPlanName(@Param("id") Long id);

    /**
     * 完成学业
     * @param id     学员信息主键
     * @return 返回影响的行数
     */
    int graduation(@Param("id") Long id);

    /**
     * 根据主键删除学员信息
     * @param id 学员信息主键
     * @return 返回影响的行数
     */
    int deleteById(@Param("id") Long id);

    /**
     * 根据身份证查询单个学员安全对象,包含密码敏感信息(status !=5 完成的去除)
     * @param idNumber 学员身份证号
     * @return 返回用户安全对象
     */
    EduStudent selectEduStudentByIdNumber(@Param("idNumber") String idNumber);

    ///**
    // * 根据主键删除学员信息
    // * @param id 学员信息主键
    // * @param deleteId 删除标识
    // * @return 返回影响的行数
    // */
    //int deleteById(@Param("id") Long id, @Param("deleteId") Long deleteId});

    /**
     * 是否存在指定科目的学员信息
     * @param eduCategoryId 科目主键
     * @return 如果存在返回true
     */
    boolean existxByEduCategoryId(@Param("eduCategoryId") Long eduCategoryId);

    /**
     * 是否存在指定计划的学员信息
     * @param eduPlanId 计划主键
     * @return 如果存在返回true
     */
    boolean existxByEduPlanId(@Param("eduPlanId") Long eduPlanId);

    /**
     * 是否存在指定身份证的学员信息
     * @param idNumber 学员信息名称
     * @param excludeId 排除的主键，如果为null则不指定排除的主键
     * @return 如果存在返回true
     */
    boolean existxByIdNumber(@Param("idNumber") String idNumber, @Param("excludeId") Long excludeId);

    /**
     * 根据主键查询单个学员信息
     * @param id 学员信息主键
     * @return 返回学员信息实体
     */
    EduStudent selectById(@Param("id") Long id);

    /**
     * 查询学员信息列表
     * @param filter 过滤条件
     * @return 返回学员信息列表
     */
    List<EduStudent> selectList(@Param("filter") EduStudentFilter filter);

    /**
     * 查询学员信息分页列表
     * @param filter 过滤条件
     * @return 返回学员信息分页列表
     */
    /*
        allowSortNames = {"name","pwd","spell","sex","id_number","phone","email","address","edu_category_id","edu_category_name","plan_id","plan_name","train_total_period","status","remark","operate_user_id","operate_user_name","operate_date_time"},
        sortNameMaps = {"name:name","pwd:pwd","spell:spell","sex:sex","id_number:id_number","phone:phone","email:email","address:address","edu_category_id:edu_category_id","edu_category_name:edu_category_name","plan_id:plan_id","plan_name:plan_name","train_total_period:train_total_period","status:status","remark:remark","operate_user_id:operate_user_id","operate_user_name:operate_user_name","operate_date_time:operate_date_time"}
    */
    @Paging
    List<EduStudent> selectPageList(@Param("filter") EduStudentFilter filter);

    /**
     * 修改学生密码
     * @param id                用户主键
     * @param pwd               新密码
     */
    Integer modifyPassword(@Param("id") Long id,@Param("pwd") String pwd);
}